<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class install extends Command
{
    /**
     * The name and signature of the console command.
     * 参数和选项为字符串：$signature = 'install {name} {--class=}'
     * php artisan install "malikuan" --class="Cate"
     * 
     * 参数为数组：$signature = 'install {name*}'
     * php artisan install "malikuan" "mamana"
     * 
     * 参数和选项都为数组：$signature = 'install {name*} {--class=*}'
     * php artisan install "malikuan" "mamana" --class="Cate" --class="Product"
     * 
     * @var string
     */
    protected $signature = 'install';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '飞跃人生SaaS系统初始化';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     */
    public function handle()
    {

        $bar = $this->output->createProgressBar(3);
        $bar->start();

        // 执行迁移文件
        $this->newLine();// 换行
        $this->comment('执行迁移文件');
        $this->call('migrate');
        $bar->advance();

        // 执行数据填充
        $this->comment('执行数据填充');
        $this->call('db:seed');
        $bar->advance();
        $this->newLine();
        $this->call('db:seed', ['--class' => 'CmsFieldTypeSeeder']);
        $bar->advance();
        $bar->finish();

        // 获取命令接收到的参数或选项的值
        // 1.参数
        // $argument = $this->argument('name');
        // $arguments = $this->arguments();
        // 2.选项
        // $queueName = $this->option('queue');
        // $options = $this->options();
        // dd($arguments, $options);

        // 交互式输入
        // $name = $this->ask('What is your name?');
        // $password = $this->secret('What is the password?');

        // 请求确认:当如果用户输入 y 或 yes ，这个方法将会返回 true 。默认返回 false 。
        // if ($this->confirm('Do you wish to continue?')) {
        // }

        // 编写输出:要发送输出到控制台，请使用 line，info，comment，question 和 error 方法。    
        // $this->line('Display this on the screen');
        // $this->info($name);

        // 表格
        // $headers = ['Name', 'Email'];
        // $users = [
        //     ['name' => 'ab', 'email' => '1@qq.com'],
        //     ['name' => 'ac', 'email' => '2@qq.com'],
        // ];
        // $this->table($headers, $users);

        // 进度条
        // $bar = $this->output->createProgressBar(10);
        // $bar->start();
        // for ($i=0; $i < 10; $i++) { 
        //     sleep(1);
        //     $bar->advance();
        // }
        // $bar->finish();

        // 命令互相调用
        // $this->call('email:send', [
        //     'user' => 1, '--queue' => 'default'
        // ]);

        return 1;
    }
}
